package com.swt.gap.service;

import com.swt.gap.common.PageResult;
import com.swt.gap.model.entity.Task;
import com.swt.gap.model.vo.*;
import com.swt.gap.model.vo.taskresult.AnalysisResultVO;
import com.swt.gap.model.vo.taskresult.TaskAnalysisVO;

import java.util.List;


public interface TaskService {

    Integer addNewTask(Task task);

    /**
     * 判断任务名称是否重名
     * @param taskName 任务名称
     * @param taskId 任务id
     * @return Boolean
     */
    Boolean judgeTaskName(String taskName, Integer taskId);

    TaskInfoVO getTaskInfoById(Integer taskId);

    Integer updateTaskInfo(TaskUpdateVO task);

    /**
     * 删除任务到回收站
     * @param taskId 任务id
     * @return Integer
     */
    Integer putTaskToRecycleBin(Integer taskId);

    /**
     * 彻底删除任务可多选，同时还要删除和该任务相关的内容
     * @param taskIds 任务id集合
     * @return Integer
     */
    Integer deleteTasks(List<Integer> taskIds);

    /**
     * 从回收站还原任务可多选
     * @param taskIds 任务id集合
     * @return Integer
     */
    Integer restoreTasks(List<Integer> taskIds);

    /**
     * 判断操作权限，是否是管理员或者任务的创建者
     * @param taskId 任务id
     * @return Boolean
     */
    Boolean judgeAuthority(Integer taskId);

    Integer updateStatus(Integer taskId, Integer status);


    /**
     * 获取我创建的历史和最近任务
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param userId
     * @return
     */
    PageResult<TaskVO> getTaskByKey(Integer pageNum, Integer pageSize,String keyword,Integer userId);

    /**
     * 获取我参加的最近和历史任务
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param userId
     * @return
     */
    PageResult<TaskVO> getJoinTaskByKey(Integer pageNum, Integer pageSize,String keyword,Integer userId);

    /**
     * 获取进行中任务
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param userId
     * @return
     */
    PageResult<TaskVO> getTaskByStatus(Integer pageNum, Integer pageSize,String keyword,Integer userId,Integer status);

    /**
     * 获取删除的任务
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param userId
     * @return
     */
    PageResult<TaskVO> getDeleteTaskByKey(Integer pageNum, Integer pageSize,String keyword,Integer userId);


//    List<Task> listTaskByCreatedUserId(Integer userId);

    List<Task> getAccessTask(String keyword, Integer userId);

    Integer updateAccessLog(Integer taskId, Integer userId);

    List<TaskAnalysisVO> getLastAnalysisTasks(Integer userId);

    List<AnalysisResultVO> getLastAnalysisResults(Integer userId);


    Boolean hasWritePermission(Integer userId, Integer taskId);

    Boolean getReadPerm(Integer taskId, String password);
}
